//* for 语句

/**
 * 一个 for 循环会一直重复执行，直到指定的循环条件为 false
 * JavaScript 的 for 循环，和 Java、C 的 for 循环 是很相似的
 * 示例：
 * for ([initialExpression]; [condition]; [incrementExpression])
 *   statement
 */


/**
 * do...while 语句一直重复直到指定的条件求值得到假值（false）
 * 示例：
 * var i = 0;
 * do {
 *   i += 1;
 *   console.log(i);
 * } while (i < 5);
 *
 * 这个 do 循环将至少重复一次，并且一直重复直到 i 不再小于 5
 */

/**while 语句
 * 一个 while 语句只要指定的条件求值为真（true）就会一直执行它的语句块
 * 示例：
 * var n = 0;
 * var x = 0;
 * while (n < 3) {
 *   n++;
 *   x += n;
 * }
 * 只要 n 小于 3  while 循环就会一直执行
 *
 * 在每次循环里  n 会增加 1 并被加到 x 上 所以 x 和 n 的变化是：
 * 第一次完成后：n = 1，x = 1
 * 第二次完成后：n = 2，x = 3
 * 第三次完成后：n = 3，x = 6
 * 在三次完成后 条件 n < 3 的结果不再为真 所以循环终止了
 */

/**
 * do...while 是【先执行一次代码块】，再【判断是否继续循环】
 * while 是先【判断是否继续循环】，再【决定是否执行代码块】
 */


//* label 语句
/**
 * 一个 label 提供了一个让你在程序中其他位置引用它的标识符
 * 例如 你可以用 label 标识一个循环 然后使用 break 或者 continue 来指出程序是否该停止循环还是继续循环
 */

/**
 * break 语句
 * 使用 break 语句来终止循环 switch 或者是链接到 label 语句
 * 当你使用不带 label 的 break 时 它会立即终止当前所在的 while，do-while  for 或者 switch 并把控制权交回这些结构后面的语句
 * 当你使用带 label 的 break 时 它会终止指定的带标记（label）的语句
 * 示例：
 * 下面的例子循环数组里的元素 直到找到一个等于 theValue 的值
 * for (i = 0; i < a.length; i++) {
 *   if (a[i] == theValue) {
 *     break;
 *   }
 * }
 */


//* continue 语句
/**continue 语句可以用来继续执行（跳过代码块的剩余部分并进入下一循环）一个 while、do-while、for
 * 或者 label 语句
 * 以下示例显示了一个循环 其中包含一个在值为 3 时执行的语句
 * var i = 0;
 * var n = 0;
 * while (i < 5) {
 *   i++;
 *   if (i == 3) {
 *     continue;
 *   }
 *   n += i;
 *   console.log(n);
 * }
 * //1,3,7,12
 */


/**
 * for...in 语句循环一个指定的变量来循环一个对象所有可枚举的属性
 * JavaScript 会为每一个不同的属性执行指定的语句
 * 示例：
 * function dump_props(obj, obj_name) {
 *   var result = "";
 *   for (var i in obj) {
 *     result += obj_name + "." + i + " = " + obj[i] + "<br>";
 *   }
 *   result += "<hr>";
 *   return result;
 * }
 */

/**
 * for...of 语句在可迭代对象（包括Array、Map、Set、arguments 等等）上创建了一个循环
 * 对值的每一个独特属性调用一次迭代
 *
 * 下面的这个例子展示了 for...of 和 for...in 两种循环语句之间的区别
 * for...in 循环遍历的结果是数组元素的下标 而 for...of 遍历的结果是元素的值：
 * let arr = [3, 5, 7];
 * arr.foo = "hello";
 *
 * for (let i in arr) {
 *   console.log(i); // 输出 "0", "1", "2", "foo"
 * }
 *
 * for (let i of arr) {
 *   console.log(i); // 输出 "3", "5", "7"
 * }
 *
 * // 注意 for...of 的输出没有出现 "hello"
 */

